/*
Automatic clinic tests using a robot arm.
Copyright (C) 2010  CIC-CPC, CHU Gabriel Montpied
All other trademarks, logos and copyrights are the property
of their respective owners.

This file is part of cpc-painbot.

cpc-painbot is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

cpc-painbot is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with cpc-painbot.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef ASCII_H
#define ASCII_H
#include "commande/commande.h"

#include <QRegExp>
#include <QMetaType>

namespace commande {
namespace indproc {

/*! Commande pour l'indicateur de process.
    Les commandes de l'indicateur de process sont au format suivant:
    \li *AAFF...\<CR\>
    \li AA : adresse de l'indicateur
    \li FF : Un ou deux caractères de commande.
    \li ... : valeur de la donnée en ascii (optionnel)
*/
class Ascii : public Commande
{
public:

    //! Format des commandes.
    static const QRegExp format;

    //! Types de commandes.
    enum Type {
        LireMin,     //!< Lecture de la valeur minimum.
        ResetMin,    //!< Remise à zéro de la valeur minimum.
        LireMax,     //!< Lecture de la valeur maximum.
        ResetMax,    //!< Remise à zéro de la valeur maximum.
        LireTare,    //!< Lecture de la tare.
        ResetTare,   //!< Remise à zéro de la tare.
        PrendreTare, //!< La valeur actuelle devient la tare.
        LireMesure   //!< Mesure courante.
    };
    static const int nbTypes = 8;

    /*! Crée une commande.
        Crée une commande en fonction du type spécifié.
        \param[in] type Commande désirée.

        \retval Ascii* La commande correspondante
        \retval 0 Si le type est inconnu
    */
    static Ascii * creer(Type type);

    //! \see Commande::Commande()
    Ascii(const QString & code, const QStringList & args = QStringList());

    int adresse(void) const { return adresse_; }
    void setAdresse(int adresse) { adresse_ = adresse; }

    virtual QString generer(void) const;


protected:
    int adresse_; //!< Adresse du destinataire de la commande.
};

} // namespace indproc
} // namespace commande

Q_DECLARE_METATYPE(commande::indproc::Ascii*)

#endif // ASCII_H
